1 module kprop.helper.prettyjson;
2 import std.json;
3 import std.range:repeat;
4 import std.conv:to;
5 
6 /**
7 	Laeeth Isharc / Kaleidic Associates 2015
8 
9 	Pretty printer for JSON (D Programming Language)
10 */
11 
12 string prettyPrint(JSONValue json, int indentLevel=0, string prefix="")
13 {
14 	import std.range:appender;
15 	auto ret=appender!string;
16 	ret.put('\t'.repeat(indentLevel));
17 	ret.put(prefix);
18 	//ret.put(' '.repeat(indentLevel*8));
19 	final switch(json.type) with(JSON_TYPE)
20 	{
21 		case NULL:
22 			ret.put("<null>\n");
23 			return ret.data;
24 		case STRING:
25 			ret.put(json.str~"\n");
26 			return ret.data;
27 		case INTEGER:
28 			ret.put(json.integer.to!string~"\n");
29 			return ret.data;
30 		case UINTEGER:
31 			ret.put(json.uinteger.to!string~"\n");
32 			return ret.data;
33 		case FLOAT:
34 			ret.put(json.floating.to!string~"\n");
35 			return ret.data;
36 		case TRUE:
37 			ret.put("true\n");
38 			return ret.data;
39 		case FALSE:
40 			ret.put("false\n");
41 			return ret.data;
42 		case OBJECT:
43 			ret.put("{\n");
44 			foreach(key,value;json.object)
45 				ret.put(value.prettyPrint(indentLevel+1,key~" : "));
46 			ret.put('\t'.repeat(indentLevel));
47 			ret.put("}\n");
48 		return ret.data;
49 		case ARRAY:
50 			ret.put("[\n");
51 			foreach(key;json.array)
52 				ret.put(prettyPrint(key,indentLevel+1));
53 			ret.put('\t'.repeat(indentLevel));
54 			ret.put("]\n");
55 			return ret.data;
56 	}
57 	assert(0);
58 }
59